﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Hotel_Admin.Common;
using HOTEL.Dao;
using Hotel.Util;
using Hotel.Domain;
using Hotel_Admin.Web.Common;

namespace Hotel_Admin
{
    public partial class QuanLyNhanVien : Authentication
    {
        private NhanVienDao nhanvienDao = new NhanVienDao();
        private ChucVuDao chuvuDao = new ChucVuDao();
        private TaiKhoanDao taikhoanDao = new TaiKhoanDao();

        protected void Page_Load(object sender, EventArgs e)
        {
            CheckViewPermission();
            if (!Page.IsPostBack)
            {
                BindDataForGird();
                LoadChucVu();
            }
        }
        protected void LoadChucVu()
        {
            var chucvus = chuvuDao.GetList();
            CommonFunc.BindDropDownList(ddlChucVu,chucvus,"TenChucVu","MaChucVu",true);
        }

        protected NHAN_VIEN NhanVien
        {
            get
            {
                if (!IsValidData())
                {
                    return null;
                }
                NHAN_VIEN obj = String.IsNullOrEmpty(txtMaNV.Text.Trim()) ? new NHAN_VIEN() : nhanvienDao.Get(int.Parse(txtMaNV.Text.Trim()));
                obj.HoTen = txtTenNhanVien.Text.Trim();
                obj.CMND = ConvertUtil.ToInteger(txtCMND.Text.Trim());
                obj.NgaySinh = ConvertUtil.ToDateTime( txtNgaySinh.Text.Trim());
                obj.DiaChi = txtDiaChi.Text;
                obj.Phai = ddlGioiTinh.Text;
                obj.MaChucVu = int.Parse( ddlChucVu.SelectedValue.ToString());
                return obj;
            }
            set
            {
                txtMaNV.Text = value.MaNV.ToString();
                txtTenNhanVien.Text = value.HoTen;
                txtCMND.Text = value.CMND.ToString();
                txtNgaySinh.Text = value.NgaySinh.HasValue?value.NgaySinh.Value.ToString():DateTime.Today.ToShortDateString();
                txtDiaChi.Text = value.DiaChi;
                ddlGioiTinh.SelectedValue = value.Phai.ToString().Trim();
                var chucvu = ddlChucVu.Items.FindByValue(value.MaChucVu.ToString());
                if(chucvu!=null)
                {
                    ddlChucVu.SelectedIndex = ddlChucVu.Items.IndexOf(chucvu);
                }
                upInfor.Update();
            }
        }
        protected bool IsValidData()
        {
            if (String.IsNullOrEmpty(txtTenNhanVien.Text.Trim()))
            {
                ShowError("Tên nhân viên không được trống", txtTenNhanVien.ClientID);
                return false;
            }
            if (String.IsNullOrEmpty(txtCMND.Text.Trim()))
            {
                ShowError("CMND không được trống", txtCMND.ClientID);
                return false;
            }
            if (String.IsNullOrEmpty(txtDiaChi.Text.Trim()))
            {
                ShowError("Địa chỉ không được để trống", txtDiaChi.ClientID);
                return false;
            }
            return true;
        }
        protected void BindDataForGird()
        {
            var list = nhanvienDao.Search(txtTenNhanVien.Text.Trim(),ConvertUtil.ToInteger( ddlChucVu.SelectedValue));
            gvList.DataSource = list;
            gvList.DataBind();
            upGird.Update();
        }
        protected void ClearForm()
        {
            txtTenNhanVien.Text = "";
            txtCMND.Text = "";
            txtDiaChi.Text = "";
            txtMaNV.Text = "";
            txtNgaySinh.Text = "";
            txtDiaChi.Text = "";
            ddlGioiTinh.SelectedIndex = 0;
            ddlChucVu.SelectedIndex = 0;
            upInfor.Update();
        }
        protected void CheckViewPermission()
        {
            if (!HasViewPermission(Pages.QuanLyNhanVien.GetHashCode()))
            {
                Redirect(WebURL.UrlWebDinie);
            }
        }

        protected void gvList_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var require = e.CommandName;
            var id = ConvertUtil.ToInteger(e.CommandArgument.ToString());
            if (!id.HasValue) return;
            var nhanvien = nhanvienDao.Get(id.Value);
            switch (require)
            {
                case "Taotaikhoan":
                        TAI_KHOAN tk = new TAI_KHOAN();
                        if (nhanvien != null)
                        {
                            tk.MaNV = nhanvien.MaNV;
                            tk.TenTaiKhoan = nhanvien.CMND.ToString();
                            tk.MatKhau = nhanvien.MaNV.ToString();
                            tk.Active = true;
                            var mes = taikhoanDao.Create(tk);
                            if (mes.MsgType.Equals(MessageType.Error))
                            {
                                ShowError("tài khoản user đã được tạo");
                            }
                            else if(mes.MsgType.Equals(MessageType.Info))
                            {
                                ShowInfor("tài khoản của nhân viên đã được tạo thành công");
                            }
                        }
                        break;

                case "EditItem":
                   
                    if (nhanvien != null)
                    {
                        NhanVien = nhanvien;
                    }
                    break;

            }
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            var obj = NhanVien;
            if (obj == null) return;
            if (string.IsNullOrEmpty(txtMaNV.Text.Trim()))
            {
                // insert
                if (!HasInsertPermission(Pages.QuanLyNhanVien.GetHashCode()))
                {
                     Redirect(WebURL.UrlWebDinie);
                }
                var msg = nhanvienDao.Insert(obj);
                if (msg.MsgType != MessageType.Info)
                {
                    ShowError("Thêm nhân viên không thành công");
                    CloseWaitingDialog();
                }
                else
                {
                    ShowInfor("Thêm nhân viên thành công");
                    ClearForm();
                    BindDataForGird();
                    CloseWaitingDialog();
                }
            }
            else
            {
                // update
                if (!HasUpdatePermission(Pages.QuanLyNhanVien.GetHashCode()))
                {
                     Redirect(WebURL.UrlWebDinie);
                }
                var msg = nhanvienDao.Update(obj);
                if (msg.MsgType != MessageType.Info)
                {
                    ShowError("Cập nhật thông tin nhân viên không thành công");
                    CloseWaitingDialog();
                }
                else
                {
                    ShowInfor("Cập nhật thông tin nhân viên thành công");
                    ClearForm();
                    BindDataForGird();
                    CloseWaitingDialog();
                }
            }
        }

        protected void btnHuy_Click(object sender, EventArgs e)
        {
            ClearForm();
            CloseWaitingDialog();
        }

        protected void btnFilter_Click(object sender, EventArgs e)
        {
            BindDataForGird();
            CloseWaitingDialog();
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
           
            // Authenticate
            if (!HasDeletePermission(Pages.QuanLyNhanVien.GetHashCode()))
            {
                CloseWaitingDialog();
                Redirect(WebURL.UrlWebDinie);
                return;
            }
            var strIds = Request["listIds"];
            if ((strIds != null) && (!string.Empty.Equals(strIds)))
            {
                var listIds = strIds.Split(',');

                // Kiem tra relation ship truoc khi delete
                string flag = "";
                foreach (var ma in listIds)
                {
                    var nv = nhanvienDao.Get(int.Parse(ma));
                    if (nv != null)
                    {
                        var msg = nhanvienDao.Delete(nv);
                        if (msg.MsgType == MessageType.Error)
                        {
                            flag += msg.ToString();
                            break;
                        }
                    }
                }
                if (string.IsNullOrEmpty(flag))
                {
                    ShowInfor("Xóa nhân viên thành Công");
                }
                else
                {
                    ShowError(flag);
                }
            }
            BindDataForGird();
            upGird.Update();
            CloseWaitingDialog();
        }

        protected void fuHinhAnh_Load(object sender, EventArgs e)
        {
           
        }

        protected void FileUpload1_Load(object sender, EventArgs e)
        {
            
        }
    }
}